package com.minisoft.customer;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author JueSu
 * @description: 首次报备是线上的客户
 * @date 2025/4/1 16:51
 */
public class OnlineReportCustomer {
    public static void main(String[] args) {
        // 1. 读取Excel文件
        String filePath = "D:\\temp\\daasResult-1744361761755.xlsx"; // 替换为你的Excel文件路径
        ExcelReader reader = ExcelUtil.getReader(filePath);

        // 读取所有行数据，假设第一行是标题行
        List<Map<String, Object>> rows = reader.readAll();

        // 2. 按电话分组
        Map<String, List<Map<String, Object>>> groupedByTel = rows.stream()
                .collect(Collectors.groupingBy(row -> row.get("cus_tel").toString()));

        List<Map<String, Object>> resultData = new ArrayList<>();

        // 3. 处理每个分组
        for (Map.Entry<String, List<Map<String, Object>>> entry : groupedByTel.entrySet()) {
            List<Map<String, Object>> group = entry.getValue();

            // 情况1: 分组只有一条数据且agent_type_no为60
            if (group.size() == 1) {
                Map<String, Object> singleRecord = group.get(0);
                if ("60".equals(singleRecord.get("agent_type_no").toString())) {
                    resultData.add(singleRecord);
                }
                continue;
            }

            // 情况2: 多条数据，按报备时间升序排序
            List<Map<String, Object>> sortedGroup = group.stream()
                    .sorted(Comparator.comparing(row -> {
                        Object dateObj = row.get("report_date");
                        if (dateObj instanceof Date) {
                            return (Date) dateObj;
                        } else {
                            // 如果日期是字符串格式，尝试解析
                            return DateUtil.parse(dateObj.toString());
                        }
                    }))
                    .collect(Collectors.toList());

            // 检查排序后的第一条记录的agent_type_no是否为60
            Map<String, Object> firstRecord = sortedGroup.get(0);
            if ("60".equals(firstRecord.get("agent_type_no").toString())) {
                resultData.add(firstRecord);
            }
            // 否则丢弃整个分组
        }

        // 4. 将结果写入新Sheet
        ExcelWriter writer = ExcelUtil.getWriter(filePath);

        // 创建新Sheet并写入结果数据
        writer.setSheet("处理结果");

        // 写入表头
        if (CollUtil.isNotEmpty(resultData)) {
            writer.writeHeadRow(resultData.get(0).keySet());
        }

        // 写入数据
        writer.write(resultData);

        // 关闭writer，保存文件
        writer.close();

        System.out.println("处理完成，共处理 " + rows.size() + " 条原始数据，生成 " + resultData.size() + " 条结果数据");
    }
}
